﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml.Serialization;
using System.IO;


namespace VideoMedia
{
    public partial class AjoutFilm : Form
    {
        private List<string> genre = new List<string>();
        private int i=0;

        private List<Film> ListDeTousLesFilms = new List<Film>();

        private List<Acteur> ListDesActeurs = new List<Acteur>();
        private List<Realisateur> ListDesRealisateurs = new List<Realisateur>();

        private List<Realisateur> ListRealTempo = new List<Realisateur>();
        private List<Acteur> ListActTempo = new List<Acteur>();
        

        public AjoutFilm()
        {

            InitializeComponent();
        }

        private void NomFilm_TextChanged(object sender, EventArgs e)
        {
            lbNomfilm.Text = TBNomFilm.Text;
        }

        private void btRetour_Click(object sender, EventArgs e)
        {
            this.Hide();
        }

        private void textBoxNomReal_KeyPress(object sender, KeyPressEventArgs e)
        {
            char c =e.KeyChar;
            if (c == ',')
            {
                TextBox tb = (TextBox)sender;
                if (label9.Visible == false)
                {
                    label9.Visible = true;
                    label11.Text += tb.Text;
                }
                else
                {
                    label11.Text += ", "+tb.Text;
                }
                AjouterRealTempo(tb.Text);
                tb.Clear();
            }
        }


        private void textBoxNomReal_TextChanged(object sender, EventArgs e)
        {
            TextBox tb = (TextBox)sender;
            if (tb.Text == ",")
            {
                tb.Clear();
            }
        }

        private void textBoxNomActeur_TextChanged(object sender, EventArgs e)
        {
            TextBox tb = (TextBox)sender;
            if (tb.Text == ",")
            {
                tb.Clear();
            }
        }

        private void textBoxNomActeur_KeyPress(object sender, KeyPressEventArgs e)
        {
            char c = e.KeyChar;
            if (c == ',')
            {
                TextBox tb = (TextBox)sender;
                if (label10.Visible == false)
                {
                    label10.Visible = true;
                    label12.Text += tb.Text;
                }
                else
                {
                    label12.Text += ", " + tb.Text;
                }
                AjouterActeurTempo(tb.Text);
                tb.Clear();
            }
        }

        private void button1OpenImage(object sender, EventArgs e)
        {
            openImage.ShowDialog();
            pictureBox1.ImageLocation = openImage.FileName;
        }

        private void buttonAjoutGenre(object sender, EventArgs e)
        {
            genre.Add(comboBoxGenre.Text);
            comboBoxGenre.Items.Remove(comboBoxGenre.Text);
            if (label14.Visible == false)
            {
                label14.Visible = true;
                label13.Text = genre[i];
            }
            else
            {
                label13.Text += ", " + genre[i];
            }
            i++;
        }

        private void buttonValid(object sender, EventArgs e)
        {
            ChargerFilmFichier();
            AjouterActeurTempo(tbActeur.Text);
            AjouterRealTempo(tbReal.Text);
            AjoutRealisateurs();
            AjoutActeurs();
            Film f = new Film(TBNomFilm.Text, openImage.FileName, ListRealTempo, ListActTempo, tbSyno.Text, openVideo.FileName, genre);
            ListDeTousLesFilms.Add(f);
            EcrireFilmFicher();
            MessageBox.Show("Votre film a été ajouté");
        }

        private void AjoutFilm_Load(object sender, EventArgs e)
        {
            ChargerLesActeurs();
            ChargerLesRealisateurs();
            foreach (Acteur a in ListDesActeurs)
            {
                if (a.NomActeur != null)
                tbActeur.AutoCompleteCustomSource.Add(a.NomActeur);
            }
            foreach (Realisateur r in ListDesRealisateurs)
            {
                if (r.NomReal != null)
                tbReal.AutoCompleteCustomSource.Add(r.NomReal);
            }
        }

        private void EcrireLesActeurs()
        {
            XmlSerializer xs = new XmlSerializer(typeof(List<Acteur>));
            StreamWriter sw = new StreamWriter("acteur.xml");
            xs.Serialize(sw, ListDesActeurs);
            sw.Close();
        }
        private void ChargerLesActeurs()
        {
            XmlSerializer xs = new XmlSerializer(typeof(List<Acteur>));
            StreamReader sr = new StreamReader("acteur.xml");
            List<Acteur> La = xs.Deserialize(sr) as List<Acteur>;
            sr.Close();
            ListDesActeurs = La;
        }
        private void ChargerLesRealisateurs()
        {
            XmlSerializer xs= new XmlSerializer(typeof(List<Realisateur>));
            StreamReader sr = new StreamReader("realisateur.xml");
            List<Realisateur> Lr = xs.Deserialize(sr) as List<Realisateur>;
            sr.Close();
            ListDesRealisateurs = Lr;
        }
        private void EcrireLesRealisateurs()
        {
            XmlSerializer xs = new XmlSerializer(typeof(List<Realisateur>));
            StreamWriter sw = new StreamWriter("realisateur.xml");
            xs.Serialize(sw, ListDesRealisateurs);
            sw.Close();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            openVideo.ShowDialog();
        }

        private void AjouterRealTempo(string nomReal)
        {
                Realisateur rl = new Realisateur(nomReal);
                ListRealTempo.Add(rl);
        }
        private void AjouterActeurTempo(string nomAct)
        {
            Acteur ac = new Acteur();
            ac.NomActeur = nomAct;
            ListActTempo.Add(ac);
        }
        private void ChargerFilmFichier()
        {
            XmlSerializer xs = new XmlSerializer(typeof(List<Film>));
            StreamReader sr = new StreamReader("film.xml");
            try
            {
                List<Film> Lf = xs.Deserialize(sr) as List<Film>;
                ListDeTousLesFilms = Lf;
            }
            catch
            {
                MessageBox.Show("Aucun film");
            }
            sr.Close();
        }

        private void EcrireFilmFicher()
        {
            XmlSerializer xs = new XmlSerializer(typeof(List<Film>));
            StreamWriter sr = new StreamWriter("film.xml");
            xs.Serialize(sr, ListDeTousLesFilms);
            sr.Close();
        }
        private void AjoutActeurs()
        {
            List<Acteur> ListAjout2 = new List<Acteur>();
            List<Acteur> vueListActeur = new List<Acteur>();
            vueListActeur = ListActTempo;
            bool nouveauAct;
            foreach (Acteur a2 in vueListActeur)
            {
                nouveauAct = true;
                foreach (Acteur a in ListDesActeurs)
                {
                    if (a.NomActeur == a2.NomActeur)
                    {
                        ListActTempo.Remove(a2);
                        ListActTempo.Add(a);
                        nouveauAct = false;
                    }
                }
                if (nouveauAct)
                {
                    ListAjout2.Add(a2);
                }
            }
            foreach (Acteur a in ListAjout2)
            {
                ListDesActeurs.Add(a);
            }
            EcrireLesActeurs();
        }
        private void AjoutRealisateurs()
        {
            List<Realisateur> vueRealTempo = new List<Realisateur>();
            foreach (Realisateur r in ListRealTempo)
            {
                vueRealTempo.Add(r);
            }
            List<Realisateur> ListAjout = new List<Realisateur>();
            bool nouveauReal;
            foreach (Realisateur r2 in vueRealTempo)
            {
                nouveauReal = true;
                foreach (Realisateur r in ListDesRealisateurs)
                {
                    if (r.NomReal == r2.NomReal)
                    {
                        ListRealTempo.Remove(r2);
                        ListRealTempo.Add(r);
                        nouveauReal = false;
                    }
                }
                if (nouveauReal)
                    ListAjout.Add(r2);
            }
            foreach (Realisateur r in ListAjout)
            {
                ListDesRealisateurs.Add(r);
            }
            EcrireLesRealisateurs();
        }
    }
}
